package com.shenda.device.codec;

import com.shenda.device.Device;
import com.shenda.device.Devices;
import com.shenda.device.handler.Handler;
import com.shenda.device.message.RespMsg;
import com.shenda.log.LogHolder;
import com.swak.rxtx.channel.Channel;
import com.swak.rxtx.channel.ChannelHandler;

import lombok.Setter;
import lombok.experimental.Accessors;

/**
 * 设备操作
 * 
 * @author lifeng
 */
@Setter
@Accessors(chain = true)
public class ChannelOperations extends ChannelHandler {

	// 设备管理器
	private Handler handler;

	/**
	 * 设备连接
	 */
	@Override
	public void connect(Channel channel) {
		Devices.me().connected(channel);
		super.connect(channel);
	}

	/**
	 * 收到数据处理
	 */
	@Override
	public void read(Channel channel, Object data) {
		// 对应设备
		Device device = Devices.me().getChannel(channel);
		if (device != null) {

			// 解码时已经将命令解密出来了
			RespMsg command = (RespMsg) data;

			// 执行处理器
			handler.doHandle(command.setDevice(device));

			// 记录读取日志
			LogHolder.log(command);
		}
	}

	/**
	 * 管理设备下线
	 */
	@Override
	public void close(Channel channel) {
		Devices.me().closed(channel);
		super.close(channel);
	}
}
